<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="banner-heading flex_ccenter">
            <div class="heading-item">
              <h1 class="title fw700 f-42 c-fff">
                インスタグラムストーリーのダウンロード
              </h1>
              <h2 class="sub c-fff f-18 fw400">
                最高のInstagramストーリーダウンローダー無料
              </h2>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                    type="text"
                    class="input f-18"
                    v-model="input"
                    @input="handleInput"
                    @paste="handleInput"
                    placeholder="Paste URL Instagram"
                    list="fruits"
                    name="fruit"
                  />
                  <datalist id="fruits">
                    <option value="Apple"></option>
                    <option value="Banana"></option>
                    <option value="Cherry"></option>
                  </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>データを取得中です。数秒お待ちください。</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              サイトは非公開のため、リンクを処理できません
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              入力したデータはリンクではありません。有効なリンクを入力してください。
              例：
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                インスタダウンローダーアプリでダウンロード
              </h3>
              <p class="f-16 c-ccc">
                私たちのアプリは、ダウンロードのための迅速かつシンプルなソリューションを提供します
                Instagram ビデオ、HD 品質のビデオを無料で提供 透かし。
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="" />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="" />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Savinginsta で Instagram ストーリーをダウンロード
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta.Com は、有名な Instagram
              ストーリーダウンローダーです。 使いやすさと高品質の Instagram
              をダウンロードできるため 最速のスピードで物語を。 Instagram
              ストーリーを Instagram
              を使用して最高品質の携帯電話、PC、またはタブレットで
              ブラウザから直接ビデオダウンローダーを使用できます。
              ソフトウェアなし インストールが必要で、Android と iOS
              の両方をサポートしています。
            </p>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Instagram ストーリーのダウンロードに Savinginsta を使用する理由?
            </h3>
            <p class="f-16 c-ccc">
              魅力的な写真やビデオが満載の Instagram ストーリーは、
              私たちのデジタル表現の重要な部分ですが、目に見えるだけです
              24時間。 Instagram ストーリーを見るのが好きで、閲覧したい場合
              ダウンロードしてください。Savinginsta がお手伝いします。
              単に入力するだけです Instagram ストーリーの URL を Savinginsta
              に保存し、最適なものをダウンロードします
              インスタグラムストーリーは無料。
            </p>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Instagramストーリーのビデオをダウンロードする方法?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Step01:</span>
                  <span class="f-16 c-000">
                    ストーリーを投稿したいInstagramのユーザー名を入力してください
                    Savinginsta.App にダウンロードします。</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Step02:</span>
                <span class="f-16 c-000">
                  ダウンロードしたいストーリーを選択します。</span
                >
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Step03:</span>
                <span class="f-16 c-000"
                  >「ダウンロード」をクリックしてビデオ Instagram
                  ストーリーを保存します デバイス。</span
                >
              </div>
            </div>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              インスタストーリーを携帯電話にダウンロードするにはどうすればよいですか?
            </h3>
            <div class="attributes-list">
              <div class="features-title">
                ダウンロードはとても簡単です。 詳細なガイドは次のとおりです。
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Chrome、Firefox、または インスタグラムアプリ。
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">魅力的だと思うストーリーを選択してください。</div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  ダウンロードしたいビデオをクリックします。
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  アドレスバーからストーリーの URL をコピーします。
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  ユーザー名を Savinginsta のアドレス ボックスに貼り付けます。
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  「ダウンロード」を押して、Instagram ストーリーをオンラインでダウンロードします。
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  ダウンロードした IG ストーリーの写真またはビデオがフォルダーにあります。
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Instagramのストーリーとハイライトをオンラインでダウンロードするにはどうすればよいですか?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="f-16 c-000"
                    >Instagram ストーリーからリンクを取得するか、
                     ダウンロードしたいInstagramアカウントのユーザー名
                     から。</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Savinginsta - インスタストーリーダウンローダーに移動し、
                   ストーリーリンクをツールバーに追加します。
                </span>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >画面に表示されたストーリーを選択し、ストーリーを選択します
                   ダウンロードしたいものを選択し、「ダウンロード」を押します。</span
                >
              </div>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Savinginsta.Com が Instagram (IG) ストーリーのダウンロードに最適な理由
               道具？
            </h3>
            <ul class="f-16 c-ccc">
              <li>ユーザーフレンドリーで最速のツール。</li>
              <li>最高のサービスを提供するための継続的なアップデート。</li>
              <li>
                完全無料！ 最小限のサポートを通じて開発をサポートします
                 広告。
              </li>
            </ul>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">ツール</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/ja/instagram-story-download"
                      >Instagramストーリーダウンローダー</nuxt-link
                    >
                  </li>
                  <li>
                    <nuxt-link to="/ja/instagram-reels-video-download"
                      >Instagram リール ダウンローダー</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="http://savingtik.com/" target="_blank"
                      >Tiktokダウンローダー</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">サポート</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> 接触 </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">法律上の</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      利用規約
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> プライバシーポリシー </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >私たちはInstagramやMetaとは提携していません</b
            >
            <div class="c-ccc f-16">
              © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>
    
<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";
export default {
  components: { pageHeader, SuccessContent },
  head: {
    htmlAttrs: {
      lang: "ja",
    },
    bodyAttrs: {
      "data-lang": "ja",
    },
    title: "最高の無料Instagramストーリーダウンローダー",
    meta: [
      { property: "og:locale", content: "ja" },
      //Page Information
      {
        name: "description",
        content:
          "Savinginsta Instagram Downloader を無料で使えば、Instagram ストーリーをオンラインで簡単にダウンロードできます。 広告なしで、高品質の Instagram ストーリーをコンピュータまたは携帯電話に直接保存します。透かしもありません",
      },

      //Schema.org Microdata
      {
        itemprop: "name",
        content: "最高の無料Instagramストーリーダウンローダー",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content: "最高の無料Instagramストーリーダウンローダー",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/ja/instagram-story-download" },

      {
        property: "og:description",
        content:
          "Savinginsta Instagram Downloader を無料で使えば、Instagram ストーリーをオンラインで簡単にダウンロードできます。 広告なしで、高品質の Instagram ストーリーをコンピュータまたは携帯電話に直接保存します。透かしもありません",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/ja/instagram-story-download" },
      {
        name: "twitter:title",
        content: "最高の無料Instagramストーリーダウンローダー",
      },
      {
        name: "twitter:description",
        content:
          "Savinginsta Instagram Downloader を無料で使えば、Instagram ストーリーをオンラインで簡単にダウンロードできます。 広告なしで、高品質の Instagram ストーリーをコンピュータまたは携帯電話に直接保存します。透かしもありません",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el/instagram-story-download",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
    ],
    script: [
      {
        json: {
          "@context": "http://schema.org",
          "@graph": [
            {
              "@type": "WebSite",
              name: "Savinginsta",
              alternateName: "Instagram downloader",
              url: "https://savinginsta.com",
            },
            {
              "@type": "WebPage",
              name: "最高の無料Instagramストーリーダウンローダー - Savinginsta", //title
              inLanguage: "ja", //语种
              description:
                "Savinginsta Instagram Downloader を無料で使えば、Instagram ストーリーをオンラインで簡単にダウンロードできます。 広告なしで、高品質の Instagram ストーリーをコンピュータまたは携帯電話に直接保存します。透かしもありません.", //元描述
              image: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg", //绝对路径
              url: "https://savinginsta.com/ja/instagram-story-download", //当前url
            },
          ],
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Instagramストーリーダウンローダーとは何ですか?`,
          content: `登録なしでInstagramストーリーを簡単にダウンロードできる無料ツールです。`,
        },
        {
          title: `Instagramストーリーのビデオをダウンロードする方法?`,
          content: `上記の簡単な手順に従って、Savinginsta で Instagram ストーリーをすぐにダウンロードしてください。`,
        },
        {
          title: `Instagram からハイライトをダウンロードするにはどうすればよいですか?`,
          content: `Instagram ハイライトをダウンロードするには、アカウントが公開されている必要があります。 Savinginsta.app にユーザー名を入力し、「ダウンロード」をクリックします。`,
        },
        {
          title: `IG ストーリーを匿名で表示したい場合はどうすればよいですか?`,
          content: `私たちには、匿名の Instagram Story Viewer Instagram Story Viewer という完璧なソリューションがあります。`,
        },
        {
          title: `Instagram アカウントでサインインする必要がありますか?`,
          content: `ログインは必要ありません。 Savinginsta は個人情報を一切要求しないため、安全かつ匿名でのダウンロードが保証されます。.`,
        },
        {
          title: `Instagram でビデオを直接保存できますか?`,
          content: `はい、ただしビデオが終了するまで待つ必要があります。`,
        },
        {
          title: `Web サイトはコンピューター用の Insta からのダウンロードをサポートしていますか?`,
          content: `もちろん、ビデオ、写真、ストーリーなどを PC からダウンロードできます。 参照: PC でインスタからダウンロードする。`,
        },
        {
          title: `InstagramストーリーをAndroidにダウンロードできますか?`,
          content: `はい、投稿リンクをコピーし、Web サイトのボックスに貼り付けて保存します。 詳細については、Android のインスタからダウンロードしてください。`,
        },
        {
          title: `iPhoneでストーリーInstagramのビデオと写真をダウンロードする方法?`,
          content: `Android と同じくらい簡単です。 iOS 向けストーリー Instagram をダウンロードするガイドをご覧ください。`,
        },
        {
          title: `コンピュータに保存されたストーリービデオはどこで見つけられますか?`,
          content: `Windows の場合は Ctrl+J、Mac の場合は Shift+Command+J を使用して、ブラウザのダウンロード履歴を確認します。`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "story",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "story",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "story",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "story",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "story",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "story",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },
    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "story",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "story",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
  },
};
</script>
<style lang="scss" scoped>
@import "@/static/style/story.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
    